JavaScript中的函数

  1. 实际的函数代码被封装在一对花括号内{}。
  2. 对函数而言,return语句是可选的。
  3. JavaScript函数总是会返回一个值。当function主体中没有return语句时,那么function返回undefined。

匿名函数

JavaScript函数可以匿名,但是函数必须存储在变量中。

var addNumbers = function(x,y){return x+y;}

上述也叫函数表达式,可以把addNumbers当做函数名,然后调用

var sum = addNumbers(2,3);

传递一个函数作为参数给另一个函数

1
2
3
4
5
6
var add = function(a,b){return a+b;}
var multiply = function(a,b){return a*b;}
function calculate(fun,c,d){
return fun(c,d);
}

创建了两个匿名函数,定义函数calculate,这个函数接受函数作为第一个参数,后面两个参数接受两个数字。
可以传递任意函数作为第一个参数来调用函数calculate。

1
2
var sum =calculate(add,2,3); // sum = 5
var multiplication = calculate(multiply,2,3);//结果为6

将函数作为参数传递很容易,这种模式在AJAX中大量使用。

关于参数的更多内容

  • 缺少参数

JavaScript函数可以传递任意的参数,多传或者少传,不传都可以。如果调用的函数的参数比声明的少,缺少的参数设置为undefined。

1
2
3
4
5
6
7
8
function callMe(a,b,c){
console.log("c is " + typeof c);
}
callMe("code","Morning");
//c is undefined
callMe("Learn","JavaScript","Function");
//c is string
  • Arguments对象

JavaScript函数有一个特殊的对象,arguments,在函数调用的过程中传递参数数组。

1
2
3
4
5
6
7
function callMe(){
var i;
for(i = 0;i < arguments.length;i++){
console.log(arguments[i]);
}
console.log("Total arguments passed: " + arguments.length);
}
1
2
3
4
5
callMe("Code","Morning","Mr.Programmer");
//Code
//Morning
//Mr.Programmer
//Total arguments passed: 3

每个参数可以从arguments对象中作为一个数组项被访问。

  • 默认参数

ECMAScript 6规定了可以定义带有默认参数的函数。

1
2
3
function greetMyVisitors(name,profession="The cool Programmer"){
alert("Welcome Mr." + name +"," + profession);
}

如果在调用过程中没有参数传递(或是undefined),则第二个参数取默认值。

1
2
3
4
5
6
greetMyVisitors("Yuchen","The student");
//Welcome Mr.Yuchen,The student
greetMyVisitors("Bob Mars");
//Welcome Mr.Bob Mars,The cool Programmer
greetMyVisitors("Bob Mars",undefined);
//Welcome Mr.Bob Mars,The cool Programmer